package com.panfeng.xcloud.boss.provider.assets.dao.mapper;

import com.panfeng.xcloud.boss.provider.assets.dto.BackTeamBonusPoolFlowDTO;
import com.panfeng.xcloud.boss.provider.assets.dto.response.UserInfoAuthRespDTO;
import com.panfeng.xcloud.dao.member.entity.UserBase;
import com.panfeng.xcloud.dao.member.mapper.UserBaseMapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface UserBaseMapperExt extends UserBaseMapper {

    UserBase selectAccountExist(@Param("toAccount") String toAccount);

    UserBase selectOne(@Param("userId") String userId);

    /**
     * 查询一个用户所有社区上游用户
     * @param userId 用户ID
     * @return  Map(memberUserId:社区上游用户Id，memberUserLevel：社区上游用户级别)
     */
    List<Map<String, String>> listCommunityUpstreamUser(@Param("userId") String userId);

    /**
     * 系统充值，增加用户可用余额 user_wallet_info
     * @param
     * @param coin
     * @param amount
     * @return
     */
    Integer systemRechargeAddUserWalletInfo(@Param("userId")String userId,
                                            @Param("coin") String coin,
                                            @Param("amount")BigDecimal amount);

    /**
     * 根据【团队长用户ID】获取所关联的【独立后台帐户】Id；
     * @param appUserId   团队长用户ID
     * @return
     */
    String findBackUserIdByAppUserId(@Param("appUserId") String appUserId);

    String findBackadminUserId();

    /**
     * 变成有效用户需要购买点卡数量
     * @return
     */
    String findActiveUserNeedAmount();

    /**
     * 获取活跃直推用户个数
     * @return
     */
    Integer countActiveUserByUserId(@Param("userId")String userId,@Param("needAmount")BigDecimal needAmount);

    /** 更新会员级别 */
    int updateMemberLevel(String userId,String level);

    /**
     * 根据会员等级，查询用户直推成员个数
     * @param userId   用户Id
     * @param level    级别
     * @return
     */
    Integer countInviterMembersByUserIdAndLevel(@Param("userId") String userId, @Param("level")String level);

    /**
     * 根据后台用户名获取关联APPUserId
     * @param userName
     * @return
     */
    String findAppUserIdByUserName(String userName);

    /**
     * 获取独立后台用户相应总后台分红占比
     * @param bacaUserId   独立后台用户
     * @return
     */
    BigDecimal findAdminRatioByBackUserId(String bacaUserId);

    /**
     * 添加团队帐户奖金流水
     * @return
     */
    Integer addBackTeamBonusPoolFlow(BackTeamBonusPoolFlowDTO backTeamBonusPoolFlowDTO);

    /**
     * 添加团队奖金池
     * @param teamUserId      后台分红为后台帐户Id，团队分红为团队长ID
     * @param coin        币种
     * @param amount      分红额度
     * @return
     */
    Integer addTeamBonusPool(@Param("teamUserId")String teamUserId, @Param("coin")String coin, @Param("amount")BigDecimal amount);

    UserInfoAuthRespDTO queryUserinfoAuth(@Param("userId") String userId);

}